package com.spzx.product;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.spzx.common.core.web.controller.BaseController;
import com.spzx.common.core.web.domain.BaseEntity;
/**
 * MyBatis-Plus代码生成器的配置和执行类
 */
public class GenMP {

    /**
     * 程序的入口方法，用于配置和启动MyBatis-Plus代码生成器
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 创建FastAutoGenerator并配置数据库连接信息
        FastAutoGenerator.create("jdbc:mysql://192.168.84.128:3306/spzx-product?characterEncoding=utf-8&useSSL=false", "root", "root")
                // 全局配置
                .globalConfig(builder -> builder
                        .author("atguigu") // 设置作者名
                        .outputDir("D:/spzx/product") // 设置输出目录
                        .dateType(DateType.ONLY_DATE) // 设置日期类型
                        .disableOpenDir() // 禁用打开输出目录
                )
                // 包配置
                .packageConfig(builder -> builder
                        .parent("com.spzx.product") // 设置父包名
                        .entity("domain") // 设置实体包名
                        .mapper("mapper") // 设置Mapper包名
                        .xml("mapper.product") // 设置Mapper XML包名
                        .service("service") // 设置Service包名
                        .serviceImpl("service.impl") // 设置ServiceImpl包名
                        .controller("controller") // 设置Controller包名
                )
                // 策略配置
                .strategyConfig(builder -> builder
                        .addInclude(
                                "brand",
                                "category",
                                "category_brand",
                                "product",
                                "product_details",
                                "product_sku",
                                "product_spec",
                                "product_unit",
                                "sku_stock") // 设置需要生成的表名

                        // 实体配置
                        .entityBuilder()
                        .enableLombok() // 启用Lombok
                        .superClass(BaseEntity.class) // 设置父类
                        .addSuperEntityColumns(
                                "id",
                                "create_by",
                                "create_time",
                                "update_by",
                                "update_time",
                                "remark",
                                "del_flag") // 设置父类列名
//                        .addIgnoreColumns
                        .enableFileOverride() // 启用文件覆盖

                        // Service配置
                        .serviceBuilder()
//                        .formatServiceFileName("I%sService")
                        .enableFileOverride() // 启用文件覆盖

                        // Controller配置
                        .controllerBuilder()
                        .superClass(BaseController.class) // 设置父类
                        .enableRestStyle() // 启用REST风格
                        .enableFileOverride() // 启用文件覆盖
                )
                // 设置模板引擎
                .templateEngine(new FreemarkerTemplateEngine())
                // 执行代码生成
                .execute();
    }
}
